package mlz.a_polymorphic.demo01;

//多态
/*
- - 必须有继承或者实现关系【二选一】
  - 要有方法的重写【如果补充些，那么多态没有意义】
  - 父类或者接口的引用指向自己子类的对象【语法格式】
 */

//xx.java -> 编译 -> xx.class -> 运行 -> 虚拟机
public class DemoTest {
    public static void main(String[] args) {
        //可以创建对象,但不是多态
        Dog dog = new Dog();
        dog.wang();
        System.out.println("------------------");

        //多态的真实应用
      //父类类型   指向  子类类型   -> 向上造型,自动类型转换
      //等号左边:编译时状态 an 是Animal类型
      //等号右边: 运行时状态 是Dog类型
      // 编译时状态 = 运行时状态

        //编译是可以识别Animal类中的所有成员
        //运行时其实看的就是方法中最终实现的内容
        Animal an = new Dog();
        an.eat(); //重写后的方法
        an.sleep();//没有重写的方法
        System.out.println(an.age);
        System.out.println(an.name);
        //System.out.println(an.sex); 获取不到子类的内容
        //an.wang(); 获取不到子类的内容
    }
}
